package com.tgr.shortLink.admin.common.interceptor;


import com.tgr.shortLink.admin.common.context.BaseContext;
import com.tgr.shortLink.admin.common.properties.JwtProperties;
import com.tgr.shortLink.admin.dto.UserInfoDTO;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;

/**
 * 描述：第三步，拦截请求处理校验jwt
 * 作者：小陶不慌张
 * 文件：JwtTokenUserInterceptor
 * 日期：2023/12/28 22:59
 */
@Component
@Slf4j

public class JwtTokenUserInterceptor implements HandlerInterceptor {
    private final JwtProperties jwtProperties;

    public JwtTokenUserInterceptor(JwtProperties jwtProperties) {
        this.jwtProperties = jwtProperties;
    }

    // 目标方法运行前运行，返回true,放行，返回false,不放行
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("开始校验token");
        //判断当前拦截到的是Controller的方法还是其他资源
        if (!(handler instanceof HandlerMethod)) {
            //当前拦截到的不是动态方法，直接放行
            return true;
        }
        System.out.println("路径:" + request.getRequestURI());
        //1、从请求头中获取令牌
        //TODO 不能使用jwtProperties引用配置的信息
        String token = request.getHeader("token");
        String username = request.getHeader("username");
        //将请求头中信息写入上下文中（BaseContext)
        UserInfoDTO userInfoDTO = UserInfoDTO.builder()
                .token(token)
                .username(username)
                .build();
        BaseContext.setUser(userInfoDTO);

//        //2、校验令牌
//        try {
//            log.info("jwt校验:{}", token);
//            JwtUtil.parseJWT("tgrShort", token);
//
//            return true;
//            //3、通过，放行
//        } catch (Exception ex) {
//            //4、不通过，响应401状态码
//
//            response.setStatus(401);
//            return false;
//            //throw new ClientException(USER_TOKEN_ERROR);
//
//        }
//    }
        return true;
    }}
